Say "Goodbye" to unknown_course and unknown_speed.
authoroliskoli <oliskoli>
Sat, 2 Jun 2007 20:24:53 +0000 (20:24 +0000)
committeroliskoli <oliskoli>
Sat, 2 Jun 2007 20:24:53 +0000 (20:24 +0000)
19 files changed:
alan.c
axim_gpb.c
cetus.c
coto.c
csv_util.c
defs.h
delgpl.c
ggv_log.c
gpssim.c
gpx.c
kml.c
nmea.c
reference/earth-expertgps.kml
route.c
stmsdf.c
trackfilter.c
unicsv.c
vitosmt.c
waypt.c

diff --git a/alan.c b/alan.c
index fbc1f7251a7d84821ff344809dc9400a891a76c6..c8b1d484fd5fc6ca4c34e121ca130be900222313 100644 (file)
--- a/alan.c
+++ b/alan.c
@@ -586,9 +586,9 @@ static void trl_read(void) {
       WP->longitude =  pt2deg(trklog->pt[j].x);
       WP->altitude  =  hgt2m(trklog->sh[j].height);
       if ( trklog->sh[j].speed >= 0 )
-       WP->speed     =  sp2mps(trklog->sh[j].speed);
+       WAYPT_SET(WP, speed, sp2mps(trklog->sh[j].speed))
       else                             /* bad speed < 0 - set to 0.0 */
-       WP->speed     =  unknown_speed;
+       WAYPT_UNSET(WP, speed);
       track_add_wpt(TL, WP);
     }
   }
@@ -796,7 +796,7 @@ static void trl_track_wpt(const waypoint *WP) {
   trklog = &(TRL.trklog[trk_idx]);
   trklog->pt[log_idx].x = deg2pt( WP->longitude);
   trklog->pt[log_idx].y = deg2pt(-WP->latitude);
-  if ( WP->speed != unknown_speed )
+  if WAYPT_HAS(WP, speed)
     trklog->sh[log_idx].speed =  mps2sp(WP->speed);
   if ( WP->altitude != unknown_alt )
     trklog->sh[log_idx].height = m2hgt(WP->altitude);
index d7e70da6f45fd8f5121fdea3d82849cd7cb4bab5..6d083cee89bfa4f1671a83fd88352d194e66c30f 100644 (file)
@@ -87,12 +87,12 @@ decode_buff(const char *buff, route_head *track)
        /* These values can be, but must not be right. */
        /* Further checks are needed to verify that. */
        /*         (!!! reference data !!!)          */
-       wpt->course = dir;
+       WAYPT_SET(wpt, course, dir);
        wpt->hdop = hdop;
        wpt->vdop = vdop;
        wpt->pdop = pdop;
        wpt->sat = sats;
-       wpt->speed = spd * 10;
+       WAYPT_SET(wpt, speed, spd * 10);
 #endif
        /* We don't have a header with some magic fixed numbers or strings. */
        /* So let us check the range for some basic values */
diff --git a/cetus.c b/cetus.c
index 6f17045cac5db4a8b94c5a0e1caf541da7806452..2406bdd713ba9b1939e395a7d1190ae3d576abf6 100644 (file)
--- a/cetus.c
+++ b/cetus.c
@@ -180,9 +180,9 @@ read_track_point(cetus_track_point_t *data, const time_t basetime)
        if (data->hdop != -1) wpt->hdop = (float) data->hdop / 10;
        
        i = be_read16(&data->speed);
-       if (i != 10000) wpt->speed = ((float) i / 10) * 0.514444;       /* meters/second */
+       if (i != 10000) WAYPT_SET(wpt, speed, ((float) i / 10) * 0.514444);     /* meters/second */
        i = be_read16(&data->course);
-       if (i != 4000) wpt->course = (float) i / 10;
+       if (i != 4000) WAYPT_SET(wpt, course, (float) i / 10);
        
        switch(data->hour / 32) /* extract fix */
        {
diff --git a/coto.c b/coto.c
index c5dfc59f42d8c2f5c17d8f426a403adc0e6de528..4b883707f1384276810e3a4de72e06c3512098f9 100644 (file)
--- a/coto.c
+++ b/coto.c
@@ -199,7 +199,7 @@ coto_track_read(struct pdb *pdb)
                wpt_tmp->latitude = DEG(pdb_read_double(&rec->latitude));
 
                // It's not the course, so leave it out for now
-               // wpt_tmp->course = pdb_read_double(&rec->arc);
+               // WAYPT_SET(wpt_tmp, course, pdb_read_double(&rec->arc));
                wpt_tmp->altitude = be_read16(&rec->alt);
                
                if (internals)
@@ -234,7 +234,7 @@ coto_track_read(struct pdb *pdb)
                                wpt_tmp->fix = fix_dgps; 
                                break;
                }
-               wpt_tmp->speed = be_read16(&rec->speed)/10.0;
+               WAYPT_SET(wpt_tmp, speed, be_read16(&rec->speed)/10.0);
                rec->time = be_read32(&rec->time);
                if (rec->time != 0)
                {
index 3af2b50bd0b71adcc013c1448950f57787cf019c..d3e760abf7a99c71fc9e24c38bd4361ac5fa1ed8 100644 (file)
@@ -898,10 +898,10 @@ xcsv_parse_val(const char *s, waypoint *wpt, const field_map_t *fmp)
     
     /* PATH CONVERSIONS ************************************************/
     if (strcmp(fmp->key, "PATH_SPEED") == 0) {
-       wpt->speed = atof(s);
+       WAYPT_SET(wpt, speed, atof(s));
     } else
     if (strcmp(fmp->key, "PATH_COURSE") == 0) {
-       wpt->course = atof(s);
+       WAYPT_SET(wpt, course, atof(s));
     } else
 
     /* TIME CONVERSIONS ***************************************************/
diff --git a/defs.h b/defs.h
index 62840196fe5008d0a41411213da859a84507ffb1..d7367740fbe284488ddc128ea6f95d568c080441 100644 (file)
--- a/defs.h
+++ b/defs.h
@@ -284,13 +284,22 @@ typedef struct {
        unsigned int icon_descr_is_dynamic:1; 
        unsigned int shortname_is_synthetic:1;
        unsigned int cet_converted:1;           /* strings are converted to UTF8; interesting only for input */
-       unsigned int temperature:1;             /* temperature field set */
-       unsigned int proximity:1;               /* proximity field set */
+       /* "flagged fields" */
+       unsigned int temperature:1;             /* temperature field is set */
+       unsigned int proximity:1;               /* proximity field is set */
+       unsigned int course:1;                  /* course field is set */
+       unsigned int speed:1;                   /* speed field is set */
+       /* !ToDo!
+       unsigned int altitude:1;                /+ altitude field is set +/
+       ... and others
+       */
+       
 } wp_flags;
 
 #define WAYPT_SET(wpt,member,val) { wpt->member = (val); wpt->wpt_flags.member = 1; }
 #define WAYPT_GET(wpt,member,def) (wpt->wpt_flags.member) ? (wpt->member) : (def)
-
+#define WAYPT_UNSET(wpt,member) wpt->wpt_flags.member = 0
+#define WAYPT_HAS(wpt,member) (wpt->wpt_flags.member)
 /*
  * This is a waypoint, as stored in the GPSR.   It tries to not 
  * cater to any specific model or protocol.  Anything that needs to
@@ -913,7 +922,5 @@ int color_to_bbggrr(char *cname);
  * but that's not very nice for the folks near sea level.
  */
 #define unknown_alt    -99999999.0
-#define unknown_course              -999.0
-#define unknown_speed       -999.0
 
 #endif /* gpsbabel_defs_h_included */
index 76c88180c5982f0d18e7b9634e82de5e9eec8ebc..dc4e3d65a010e2a48916aa2c1b237fe95b102090 100644 (file)
--- a/delgpl.c
+++ b/delgpl.c
@@ -70,9 +70,9 @@ gpl_read(void)
                wpt_tmp->altitude = FEET_TO_METERS(alt_feet);
                wpt_tmp->creation_time = le_read32(&gp.tm);
                
-               wpt_tmp->course = le_read_double(&gp.heading);
-               wpt_tmp->speed = le_read_double(&gp.speed);     
-               wpt_tmp->speed = MILES_TO_METERS(wpt_tmp->speed)/3600;  
+               WAYPT_SET(wpt_tmp, course, le_read_double(&gp.heading));
+               WAYPT_SET(wpt_tmp, speed, le_read_double(&gp.speed));
+               WAYPT_SET(wpt_tmp, speed, MILES_TO_METERS(wpt_tmp->speed)/3600);        
                
                track_add_wpt(track_head, wpt_tmp);
        }
index dbb14544ac43af9e5528c3888e04e3a203b24352..ef31cba3115596698449c660f16b95e08b6ffbb9 100644 (file)
--- a/ggv_log.c
+++ b/ggv_log.c
@@ -125,13 +125,13 @@ ggv_log_read(void)
                xlon = (double)deg + ((double)min / (double)60) + (sec / (double)3600.0);
                wpt->longitude = xlon;
                
-               wpt->course = le_read16(&buf[16 + 0]);
+               WAYPT_SET(wpt, course, le_read16(&buf[16 + 0]));
                
                if (ggv_log_ver == 10) {
                        double secs;
                        
                        wpt->altitude = le_read16(&buf[16 +  2]);
-                       wpt->speed =    le_read16(&buf[16 +  4]);
+                       WAYPT_SET(wpt, speed, le_read16(&buf[16 +  4]));
                        tm.tm_year =    le_read16(&buf[16 +  8]);
                        tm.tm_mon =     le_read16(&buf[16 + 10]);
                        tm.tm_mday =    le_read16(&buf[16 + 12]);
index 67cab0dae30f0728112c6e381f2786f32359894a..067d41bd41b2fdef8bbfbbf3fc1d4f70980835c0 100644 (file)
--- a/gpssim.c
+++ b/gpssim.c
@@ -104,7 +104,7 @@ gpssim_write_pt(const waypoint *wpt)
        char obuf[1024];
        double lat, lon;
 
-       if (wpt->speed > 0) {
+       if WAYPT_HAS(wpt, speed) {
                gpssim_write_spd(mpsec2knots(wpt->speed));
        }
 
diff --git a/gpx.c b/gpx.c
index 7d307daac8d887b1a2c23af673ddee878f2f02c7..c287bc74602a281ffa57030be1a0de5ce363d790 100644 (file)
--- a/gpx.c
+++ b/gpx.c
@@ -997,10 +997,10 @@ gpx_end(void *data, const XML_Char *xml_el)
                trk_head->rte_num = atoi(cdatastrp);
                break;
        case tt_trk_trkseg_trkpt_course:
-               wpt_tmp->course = atof(cdatastrp);
+               WAYPT_SET(wpt_tmp, course, atof(cdatastrp));
                break;
        case tt_trk_trkseg_trkpt_speed:
-               wpt_tmp->speed = atof(cdatastrp);
+               WAYPT_SET(wpt_tmp, speed, atof(cdatastrp));
                break;
 
        /*
@@ -1597,11 +1597,11 @@ gpx_track_disp(const waypoint *waypointp)
 
        /* These were accidentally removed from 1.1 */
        if (gpx_wversion_num == 10) {
-               if (waypointp->course >= 0) {
+               if WAYPT_HAS(waypointp, course) {
                        gbfprintf(ofd, "  <course>%f</course>\n", 
                                waypointp->course);
                }
-               if (waypointp->speed >= 0) {
+               if WAYPT_HAS(waypointp, speed) {
                        gbfprintf(ofd, "  <speed>%f</speed>\n", 
                                waypointp->speed);
                }
diff --git a/kml.c b/kml.c
index 47ad9937eb088df874104922e501d15bb3eb8569..8a0b9cef279e970647c7c7fbabf75d4956985cd6 100644 (file)
--- a/kml.c
+++ b/kml.c
@@ -537,13 +537,13 @@ static void kml_output_description(const waypoint *pt)
        if (pt->altitude != unknown_alt) TD2("Altitude: %.1f %s", alt, alt_units);
        if (pt->heartrate) TD("Heart rate: %d", pt->heartrate);
        if (pt->cadence) TD("Cadence: %d", pt->cadence);
-       if (pt->wpt_flags.temperature) TD("Temperature: %.1f", pt->temperature);
-       if (pt->speed > 0) {
+       if WAYPT_HAS(pt, temperature) TD("Temperature: %.1f", pt->temperature);
+       if WAYPT_HAS(pt, speed) {
                char *spd_units;
                double spd = fmt_speed(pt->speed, &spd_units);
                TD2("Speed: %.1f %s", spd, spd_units);
        }
-       TD("Heading: %.1f", pt->course);
+       if WAYPT_HAS(pt, course) TD("Heading: %.1f", pt->course);
        /* This really shouldn't be here, but as of this writing, 
         * Earth can't edit/display the TimeStamp.  
         */
diff --git a/nmea.c b/nmea.c
index a814f3b9e803b2541051171cc7101aa8149b0876..841f2483df71b7a0398e46f4ce40ff5da8a2e2f2 100644 (file)
--- a/nmea.c
+++ b/nmea.c
@@ -655,12 +655,12 @@ gpvtg_parse(char *ibuf)
                &course,&ct,&magcourse,&cm,&speed_n,&cn,&speed_k,&ck);
                
        if (curr_waypt) {
-               curr_waypt->course = course;            
+               WAYPT_SET(curr_waypt, course, course);
                
                if (speed_k>0)
-                       curr_waypt->speed = speed_k*kmh2mps;
+                       WAYPT_SET(curr_waypt, speed, speed_k*kmh2mps)
                else
-                       curr_waypt->speed = speed_n*kts2mps;
+                       WAYPT_SET(curr_waypt, speed, speed_n*kts2mps);
 
        }       
        
index b46cb960da0256c6ac62eb3e73baa64680fab2d9..9c66b0a37b3359dd5f1b6dbfb63488e10720aea2 100644 (file)
                 <tr><td>Longitude: -71.107628 </td></tr>
                 <tr><td>Latitude: 42.430950 </td></tr>
                 <tr><td>Altitude: 77.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T00:18:15Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.109236 </td></tr>
                 <tr><td>Latitude: 42.431240 </td></tr>
                 <tr><td>Altitude: 87.1 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-11-07T23:53:41Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.109942 </td></tr>
                 <tr><td>Latitude: 42.434980 </td></tr>
                 <tr><td>Altitude: 148.6 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-11-07T23:53:41Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.113223 </td></tr>
                 <tr><td>Latitude: 42.436757 </td></tr>
                 <tr><td>Altitude: 123.4 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-11-28T21:05:28Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.114456 </td></tr>
                 <tr><td>Latitude: 42.439018 </td></tr>
                 <tr><td>Altitude: 185.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T03:26:55Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.114803 </td></tr>
                 <tr><td>Latitude: 42.438594 </td></tr>
                 <tr><td>Altitude: 151.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-11-28T21:05:28Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.116146 </td></tr>
                 <tr><td>Latitude: 42.438917 </td></tr>
                 <tr><td>Altitude: 147.1 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-11-16T23:03:38Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.119277 </td></tr>
                 <tr><td>Latitude: 42.438878 </td></tr>
                 <tr><td>Altitude: 146.3 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-11-28T21:05:28Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.119689 </td></tr>
                 <tr><td>Latitude: 42.439227 </td></tr>
                 <tr><td>Altitude: 189.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T03:26:55Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.120925 </td></tr>
                 <tr><td>Latitude: 42.439993 </td></tr>
                 <tr><td>Altitude: 177.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T00:18:14Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.121676 </td></tr>
                 <tr><td>Latitude: 42.441727 </td></tr>
                 <tr><td>Altitude: 221.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T00:18:16Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.122044 </td></tr>
                 <tr><td>Latitude: 42.443904 </td></tr>
                 <tr><td>Altitude: 166.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-11-28T21:05:28Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.122845 </td></tr>
                 <tr><td>Latitude: 42.445359 </td></tr>
                 <tr><td>Altitude: 202.3 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-11-28T21:05:28Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.121447 </td></tr>
                 <tr><td>Latitude: 42.447298 </td></tr>
                 <tr><td>Altitude: 419.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T03:26:58Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.122320 </td></tr>
                 <tr><td>Latitude: 42.449765 </td></tr>
                 <tr><td>Altitude: 393.1 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-11-07T23:53:41Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.121746 </td></tr>
                 <tr><td>Latitude: 42.451442 </td></tr>
                 <tr><td>Altitude: 244.8 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-11-07T23:53:41Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.121211 </td></tr>
                 <tr><td>Latitude: 42.453256 </td></tr>
                 <tr><td>Altitude: 255.9 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-11-07T23:53:41Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.119356 </td></tr>
                 <tr><td>Latitude: 42.456252 </td></tr>
                 <tr><td>Altitude: 258.2 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-11-07T23:53:41Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.119676 </td></tr>
                 <tr><td>Latitude: 42.456592 </td></tr>
                 <tr><td>Altitude: 258.2 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-11-07T23:53:41Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.119845 </td></tr>
                 <tr><td>Latitude: 42.457388 </td></tr>
                 <tr><td>Altitude: 242.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T03:27:00Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.119135 </td></tr>
                 <tr><td>Latitude: 42.458148 </td></tr>
                 <tr><td>Altitude: 224.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T03:27:00Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.117693 </td></tr>
                 <tr><td>Latitude: 42.459377 </td></tr>
                 <tr><td>Altitude: 210.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T03:27:01Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.119828 </td></tr>
                 <tr><td>Latitude: 42.464183 </td></tr>
                 <tr><td>Altitude: 173.9 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-11-28T21:05:28Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.119399 </td></tr>
                 <tr><td>Latitude: 42.465650 </td></tr>
                 <tr><td>Altitude: 185.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T03:27:02Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.119328 </td></tr>
                 <tr><td>Latitude: 42.465913 </td></tr>
                 <tr><td>Altitude: 211.7 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-11-07T23:53:41Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.113574 </td></tr>
                 <tr><td>Latitude: 42.467110 </td></tr>
                 <tr><td>Altitude: 176.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T03:27:02Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.110067 </td></tr>
                 <tr><td>Latitude: 42.466459 </td></tr>
                 <tr><td>Altitude: 160.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T03:27:02Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.109410 </td></tr>
                 <tr><td>Latitude: 42.466557 </td></tr>
                 <tr><td>Altitude: 161.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T03:27:02Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.107117 </td></tr>
                 <tr><td>Latitude: 42.463495 </td></tr>
                 <tr><td>Altitude: 205.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T03:27:03Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.107360 </td></tr>
                 <tr><td>Latitude: 42.465687 </td></tr>
                 <tr><td>Altitude: 288.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T03:27:03Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.106170 </td></tr>
                 <tr><td>Latitude: 42.459986 </td></tr>
                 <tr><td>Altitude: 239.3 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-11-16T23:03:38Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.105116 </td></tr>
                 <tr><td>Latitude: 42.457616 </td></tr>
                 <tr><td>Altitude: 239.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T03:27:04Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.105206 </td></tr>
                 <tr><td>Latitude: 42.453845 </td></tr>
                 <tr><td>Altitude: 218.8 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-11-16T23:03:38Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.105413 </td></tr>
                 <tr><td>Latitude: 42.451430 </td></tr>
                 <tr><td>Altitude: 188.9 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-11-16T23:03:38Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.106158 </td></tr>
                 <tr><td>Latitude: 42.448448 </td></tr>
                 <tr><td>Altitude: 204.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T03:27:04Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.106624 </td></tr>
                 <tr><td>Latitude: 42.447804 </td></tr>
                 <tr><td>Altitude: 205.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T03:27:04Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.108882 </td></tr>
                 <tr><td>Latitude: 42.444773 </td></tr>
                 <tr><td>Altitude: 206.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T03:27:05Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.106301 </td></tr>
                 <tr><td>Latitude: 42.443592 </td></tr>
                 <tr><td>Altitude: 182.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T03:27:05Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.111441 </td></tr>
                 <tr><td>Latitude: 42.442981 </td></tr>
                 <tr><td>Altitude: 210.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T03:26:58Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.110975 </td></tr>
                 <tr><td>Latitude: 42.442196 </td></tr>
                 <tr><td>Altitude: 210.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T03:26:55Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.113220 </td></tr>
                 <tr><td>Latitude: 42.441754 </td></tr>
                 <tr><td>Altitude: 185.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T03:26:55Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.114456 </td></tr>
                 <tr><td>Latitude: 42.439018 </td></tr>
                 <tr><td>Altitude: 185.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T03:26:55Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.113223 </td></tr>
                 <tr><td>Latitude: 42.436757 </td></tr>
                 <tr><td>Altitude: 123.4 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-11-28T21:05:28Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.109942 </td></tr>
                 <tr><td>Latitude: 42.434980 </td></tr>
                 <tr><td>Altitude: 148.6 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-11-07T23:53:41Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.109236 </td></tr>
                 <tr><td>Latitude: 42.431240 </td></tr>
                 <tr><td>Altitude: 87.1 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-11-07T23:53:41Z </td></tr>
               </table>
             ]]></description>
                 <tr><td>Longitude: -71.107628 </td></tr>
                 <tr><td>Latitude: 42.430950 </td></tr>
                 <tr><td>Altitude: 77.0 ft </td></tr>
-                <tr><td>Heading: -999.0 </td></tr>
                 <tr><td>Time: 2001-06-02T00:18:15Z </td></tr>
               </table>
             ]]></description>
diff --git a/route.c b/route.c
index d6c6a38808a096076afc9e3b3d910dab10331b88..2bbb6f90b2569620f34e15b33626a7cd56c34e10 100644 (file)
--- a/route.c
+++ b/route.c
@@ -521,8 +521,8 @@ void track_recompute(const route_head *trk, computed_trkdata **trkdatap)
                tlon = RAD(this->longitude);
                plat = RAD(prev->latitude);
                plon = RAD(prev->longitude);
-               this->course = heading_true_degrees(plat, plon,
-                       tlat, tlon);
+               WAYPT_SET(this, course, heading_true_degrees(plat, plon,
+                       tlat, tlon));
                dist = radtometers(gcdist(plat, plon, tlat, tlon));
 
                /* 
@@ -536,7 +536,7 @@ void track_recompute(const route_head *trk, computed_trkdata **trkdatap)
                 * If we've moved as much as a meter, recompute speed.
                 */
                if (timed && (dist > 1)) {
-                       this->speed = dist / labs(timed);
+                       WAYPT_SET(this, speed, dist / labs(timed));
                        if (this->speed > tdata->max_spd) {
                                tdata->max_spd = this->speed;
                        }
index 8f0ded034fda177e762bacee7f76ba5fa1cb4bc4..89aa076e20007beebeaeac7fb53df2df875708a2 100644 (file)
--- a/stmsdf.c
+++ b/stmsdf.c
@@ -271,7 +271,7 @@ parse_point(char *line)
                        case 7:
                                switch(what) {
                                        case 0: 
-                                               wpt->speed = atof(str) * 3.6; break;
+                                               WAYPT_SET(wpt, speed, atof(str) * 3.6); break;
                                        case 3: 
                                                WAYPT_SET(wpt, proximity, atof(str));
                                                xasprintf(&wpt->notes, "Alarm point: radius=%s", str);
@@ -279,7 +279,7 @@ parse_point(char *line)
                                }
                                break;
                        case 8:
-                               if (what == 0) wpt->course = atof(str);
+                               if (what == 0) WAYPT_SET(wpt, course, atof(str));
                                break;
                        case 9:
                        case 10:
@@ -439,8 +439,8 @@ calculate(const waypoint *wpt, double *dist, double *speed, double *course,
                if (asc) *asc = 0;
                if (desc) *desc = 0;
        }
-       if (wpt->speed != unknown_speed) *speed = wpt->speed / 3.6;     /* -> meters per second */
-       if (wpt->course != unknown_course) *course = wpt->course;
+       if WAYPT_HAS(wpt, speed) *speed = wpt->speed / 3.6;     /* -> meters per second */
+       if WAYPT_HAS(wpt, course) *course = wpt->course;
 }
 
 /* pre-calculation callbacks */
index 3b3a1cbcf2faac99117335ee7ce23f6f6be36811..408d64ebd8feda4af37901e0ad630ee4673b9ced 100644 (file)
@@ -729,29 +729,29 @@ trackfilter_synth(void)
                }
                if ( first ) {
                        if ( opt_course ) {
-                               wpt->course = 0;
+                               WAYPT_SET(wpt, course, 0);
                        }
                        if ( opt_speed ) {
-                               wpt->speed = 0;
+                               WAYPT_SET(wpt, speed, 0);
                        }
                        first = 0;
                }
                else {
                        if ( opt_course ) {
-                               wpt->course = heading_true_degrees( RAD(oldlat), 
+                               WAYPT_SET(wpt, course, heading_true_degrees( RAD(oldlat), 
                                        RAD(oldlon),RAD(wpt->latitude), 
-                                       RAD(wpt->longitude) );
+                                       RAD(wpt->longitude)) );
                        }
                        if ( opt_speed ) {
                                if ( oldtime != wpt->creation_time ) {
-                                       wpt->speed = radtometers(gcdist( 
+                                       WAYPT_SET(wpt, speed, radtometers(gcdist( 
                                            RAD(oldlat), RAD(oldlon), 
                                            RAD(wpt->latitude), 
                                            RAD(wpt->longitude))) /
-                                           labs(wpt->creation_time-oldtime);
+                                           labs(wpt->creation_time-oldtime));
                                }       
                                else {
-                                       wpt->speed = unknown_speed;
+                                       WAYPT_UNSET(wpt, speed);
                                }
                        }
                }
index 34e9e34d75d9dd1657b73b2a4e97ce4d0d3f9640..04e061a976e59cee32bbd13cc84a8d51da71a770 100644 (file)
--- a/unicsv.c
+++ b/unicsv.c
@@ -424,12 +424,12 @@ unicsv_parse_one_line(char *ibuf)
                        break;
 
                case fld_speed:
-                       wpt->speed = atof(s);
+                       WAYPT_SET(wpt, speed, atof(s));
                        unicsv_data_type = trkdata;
                        break;
 
                case fld_course:
-                       wpt->course = atof(s);
+                       WAYPT_SET(wpt, course, atof(s));
                        unicsv_data_type = trkdata;
                        break;
                        
index f2b6f2362c9c9063c086e013ad3fda624c5e26b8..a0d29072670834eadd3700c891c1bf408eecb621 100644 (file)
--- a/vitosmt.c
+++ b/vitosmt.c
@@ -195,8 +195,8 @@ vitosmt_read(void)
                wpt_tmp->shortname      =xcalloc(16,1);
                snprintf(wpt_tmp->shortname, 15 , "WP%04d", ++serial);
 
-               wpt_tmp->speed  = speed*kts2mps; /* meters per second */
-               wpt_tmp->course = course;
+               WAYPT_SET(wpt_tmp, speed, speed*kts2mps); /* meters per second */
+               WAYPT_SET(wpt_tmp, course, course);
                wpt_tmp->pdop   = pdop;
 
                /* 
diff --git a/waypt.c b/waypt.c
index b884eba086163543582d466a6f78f4ea80160dad..b0190d6f7c4f3fee472fc34cdebce29bebeb90a6 100644 (file)
--- a/waypt.c
+++ b/waypt.c
@@ -151,8 +151,6 @@ waypt_new(void)
 
        wpt = (waypoint *) xcalloc(sizeof (*wpt), 1);
        wpt->altitude = unknown_alt;
-       wpt->course = unknown_course;
-       wpt->speed = unknown_speed;
        wpt->fix = fix_unknown;
        wpt->sat = -1;